package main

import "fmt"

/*
结构体、结构体对象的引入
*/

//定义老师结构体，将老师中的各个属性  统一放入结构体中管理：
type Teacher struct {
	//变量名字大写外界可以访问这个属性
	Name   string
	Age    int
	School string
}

func main() {
	teacherBuilder1()

	fmt.Println("---------------- ---------------- ----------------")

	teacherBuilder2()

	fmt.Println("---------------- ---------------- ----------------")

	teacherBuilder3()

	fmt.Println("---------------- ---------------- ----------------")

	teacherBuilder4()

}

func teacherBuilder4() {
	// 返回的是结构体的指针
	//创建老师结构体的实例,对象,变量
	var t *Teacher = &Teacher{"尼尔", 29, "机械纪元"}
	// t是指针, t其实指向的就是地址,应该给这个地址的指向的对象的字段赋值
	fmt.Println(*t)
}

func teacherBuilder3() {
	// 返回的是结构体的指针
	//创建老师结构体的实例,对象,变量
	var t *Teacher = new(Teacher)
	// t是指针, t其实指向的就是地址,应该给这个地址的指向的对象的字段赋值
	(*t).Name = "路飞"
	(*t).Age = 22
	//为了符合程序员的编程习惯, go提供了简化的赋值方式
	//通过go编译器, 对 t.School 转化为 (*t).School
	t.School = "东海"
	fmt.Println(*t)
}

func teacherBuilder2() {
	//创建老师结构体的实例,对象,变量
	var t Teacher = Teacher{"鸣人", 28, "木叶村"}
	fmt.Println(t)
}

func teacherBuilder1() {
	//方式1
	//创建老师结构体的实例、对象、变量：
	var t1 Teacher  // var a int
	fmt.Println(t1) //在未赋值时默认值：{ 0 }
	t1.Name = "马士兵"
	t1.Age = 45
	t1.School = "清华大学"
	fmt.Println(t1)
	fmt.Println(t1.Age + 10)
}
